import axios from "axios";
import type { ResponseType, TodoList } from "./types";

// 1. 获取所有todoList
export const getTodoListApi = () => {
  //  get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
  /*
    第一个泛型参数T, 作用：第二个泛型参数R的默认值会使用
    第二个泛型参数R: 默认值为 AxiosResponse<T>
      export interface AxiosResponse<T = any, D = any> {
        data: T;
        status: number;
        statusText: string;
        headers: RawAxiosResponseHeaders | AxiosResponseHeaders;
        config: InternalAxiosRequestConfig<D>;
        request?: any;
      }

      所以：第一个泛型参数T，最终会作为AxiosResponse中data的数据类型

      作用：作为整个函数的返回值的结果值类型
        整个函数的返回值类型是Promise对象，结果值为R

      结论：第一个泛型参数T，最终作为函数返回值的结果值中data类型

      const res = await axios.get<string>("/todoList");
      
      res = {
        data: T; // 服务器响应内容
        status: number;
        statusText: string;
        headers: RawAxiosResponseHeaders | AxiosResponseHeaders;
        config: InternalAxiosRequestConfig<D>;
        request?: any;
      }

  */
  return axios.get<ResponseType<TodoList>>("/api/todoList");
};

// 2. 添加todo
export const addTodoApi = (title: string) => {
  return axios.post<ResponseType<null>>("/api/todo", { title });
};
